package com.aps.algorithm.core;

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.util.HashMap;
import java.util.Map;

/**
 * 算法参数
 * 用于配置算法的各种参数
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlgorithmParameters {
    
    /**
     * 通用参数映射
     */
    @Builder.Default
    private Map<String, Object> parameters = new HashMap<>();
    
    /**
     * 最大执行时间（毫秒）
     */
    @Builder.Default
    private long maxExecutionTime = 30000;
    
    /**
     * 是否启用详细日志
     */
    @Builder.Default
    private boolean enableDetailedLogging = false;
    
    /**
     * 随机种子（用于可重复的结果）
     */
    private Long randomSeed;
    
    /**
     * 设置参数
     * @param key 参数键
     * @param value 参数值
     */
    public void setParameter(String key, Object value) {
        parameters.put(key, value);
    }
    
    /**
     * 获取参数
     * @param key 参数键
     * @param defaultValue 默认值
     * @return 参数值
     */
    @SuppressWarnings("unchecked")
    public <T> T getParameter(String key, T defaultValue) {
        return (T) parameters.getOrDefault(key, defaultValue);
    }
    
    /**
     * 获取参数
     * @param key 参数键
     * @return 参数值
     */
    public Object getParameter(String key) {
        return parameters.get(key);
    }
    
    /**
     * 检查是否包含参数
     * @param key 参数键
     * @return 是否包含
     */
    public boolean containsParameter(String key) {
        return parameters.containsKey(key);
    }
    
    /**
     * 移除参数
     * @param key 参数键
     */
    public void removeParameter(String key) {
        parameters.remove(key);
    }
    
    /**
     * 清空所有参数
     */
    public void clearParameters() {
        parameters.clear();
    }
}
